/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import dao.DAOInit;
import dao.interfaces.DAOEnseignant;
import dao.interfaces.DAOEtudiant;
import dao.interfaces.DAOPersonne;
import gestionform.GestionConnexion;
import gestionform.GestionEnseignant;
import gestionform.GestionEtudiant;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.Enseignant;
import model.Etudiant;
import model.Personne;
import utils.TypeUtilisateur;

/**
 *
 * @author Paul
 */
public class Connexion extends HttpServlet {

    public static final String CONF_DAO_INIT = "daoInit";
    public static final String ATT_USER = "utilisateur";
    public static final String ATT_GESTION_CONNEXION = "gConnexion";
    public static final String ATT_SESSION_PERS = "sessionPersonne";
    public static final String VUE_CONNEXION = "/view/connexion.jsp";
    public static final String SERVLET_RECAP_NOTES = "/RecapNotes";
    public static final String ATT_SESSION_ETUDIANT = "etudiant";
    public static final String SERVLET_ADMINISTRATION_ACCUEIL = "/AdministrationAccueil";
    private DAOEtudiant daoEtudiant;
    private DAOPersonne daoPersonne;
    private DAOEnseignant daoEnseignant;

    /**
     *
     * @throws ServletException
     */
    @Override
    public void init() throws ServletException {
        /* Récupération d'une instance de notre DAO Personne */
        this.daoPersonne = ((DAOInit) getServletContext().getAttribute(CONF_DAO_INIT)).getDAOPersonne();
        this.daoEtudiant = ((DAOInit) getServletContext().getAttribute(CONF_DAO_INIT)).getDAOEtudiant();
        this.daoEnseignant = ((DAOInit) getServletContext().getAttribute(CONF_DAO_INIT)).getDAOEnseignant();
    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /* Affichage de la page de connexion */
        this.getServletContext().getRequestDispatcher(VUE_CONNEXION).forward(request, response);
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /* Préparation de l'objet GestionConnexion */
        GestionConnexion gConnexion = new GestionConnexion(daoPersonne);
        /* Traitement de la requête et récupération du bean en résultant */
        Personne pers = gConnexion.connexionUtilisateur(request);
        /* Récupération de la session depuis la requête */
        HttpSession session = request.getSession();
        if (gConnexion.getErreurs().isEmpty()) {
            session.setAttribute(ATT_SESSION_PERS, pers);
            if (TypeUtilisateur.ENSEIGNANT.getNomTypeUtilisateur().equals(pers.getTypeUtilisateur())) {
                GestionEnseignant gEnseignant = new GestionEnseignant(daoEnseignant);
                Enseignant ens = gEnseignant.connexionEtudiant(request);
                session.setAttribute("enseignant", ens);
                this.getServletContext().getRequestDispatcher(SERVLET_ADMINISTRATION_ACCUEIL).forward(request, response);
            } else if (TypeUtilisateur.ETUDIANT.getNomTypeUtilisateur().equals(pers.getTypeUtilisateur())) {
                GestionEtudiant gEtudiant = new GestionEtudiant(daoEtudiant);
                Etudiant etud = gEtudiant.connexionEtudiant(request);
                session.setAttribute(ATT_SESSION_ETUDIANT, etud);
                this.getServletContext().getRequestDispatcher(SERVLET_RECAP_NOTES).forward(request, response);
            }
        } else {
            session.setAttribute(ATT_SESSION_PERS, null);
            session.setAttribute(ATT_GESTION_CONNEXION, gConnexion);
            this.getServletContext().getRequestDispatcher(VUE_CONNEXION).forward(request, response);
        }
    }
}
